package com.wzs.easytobuy.service;

import com.wzs.easytobuy.model.*;
import com.wzs.easytobuy.utils.PageModel;

import java.util.List;
import java.util.Map;

/**
 * @author miaomiao
 * @version 1.0.0
 * @Description 处理商品分类类型业务的接口
 * @createTime 2021-06-24- 16:08:00
 */
public interface IProductService {

    /**
     * 将商品分类的信息放到服务器中,方便使用
     *
     * @return key为oneList, twoList      List为每级分类中的结果集
     */
    Map<String, List<Map<String, List<ProductType>>>> getAll();

    /**
     * 通过商品分类类型的id来获取该类型的所有信息,传给商品分类信息页
     *
     * @param id productId
     * @return productType
     */
    ProductType selectByPrimaryKey(String id);

    /**
     * 通过商品分类类型的名称来获取该类型的所有信息,传给商品分类信息页
     *
     * @param productTypeName 商品分类类型的名称
     * @return productType
     */
    ProductType selectByName(String productTypeName);

    /**
     * 根据商品所属栏目结合姓名的条件查询
     *
     * @param proColumn 商品所属栏目
     * @param name      商品分类品牌
     * @return 将所有符合条件的记录数返回
     */
    List<ProductType> selectByPcAndName(String proColumn, String name);

    /**
     * 根据商品类型的id进行product和format多表联查
     *
     * @param productTypeId 商品类型id
     * @param pageModel     分页封装的工具类
     * @param name
     * @return 返回一个pageModel
     */
    PageModel<Product> productPageList(String productTypeId, PageModel<Product> pageModel, String name);

    /**
     * 通过商品分类页面跳转到详情页传的参数商品id来查商品的全部信息
     *
     * @param id 商品id
     * @return 返回一个商品对象(封装商品的所有信息)
     */
    Product selectById(String id);

    /**
     * 为了显示库存到商品详情页,需要从规格表中取出该规格的商品的库存
     *
     * @param productId 商品id
     * @param price     商品该规格的价格
     * @param sales     商品该规格的销量
     * @return 返回一个规格对象
     */
    Format selectFormatById(String productId, Integer price, Integer sales);

    /**
     * 根据商品的id查询出该商品所有的颜色类型
     *
     * @param productId 商品id
     * @return 返回一个color对象
     */
    List<Color> selectColorByPid(String productId);

    /**
     * 根据商品的id查询出该商品所有的容量类型
     *
     * @param productId 商品id
     * @return 返回一个容量大小对象
     */
    List<Size> selectSizeByPid(String productId);

    /**
     * 如果点击了商品详情,就将该商品添加到历史记录中
     *
     * @param fId 规格id
     * @param uId 用户id
     */
    void addHistory(String fId, String uId);

    /**
     * 根据用户id查询出所有的历史记录商品
     *
     * @param userId 用户id
     * @return 返回历史记录列表
     */
    List<Map<String, Object>> selectHistoryByUid(String userId);

    /**
     * 分页查询订单列表
     *
     * @param userId    用户id
     * @param pageModel 分页的对象
     * @return 返回一个vo对象
     */
    PageModel<Map<String, Object>> orderPageList(String userId, PageModel<Map<String, Object>> pageModel);

    /**
     * 分页查询商品收藏列表
     *
     * @param userId    用户id
     * @param pageModel 分页的对象
     * @return 返回一个vo对象
     */
    PageModel<Map<String, Object>> likePageList(String userId, PageModel<Map<String, Object>> pageModel);

    /**
     * 删除商品收藏中的商品
     *
     * @param id 商品收藏的id
     * @return 返回一个true/false
     */
    boolean deleteLike(String id);

    /**
     * 添加商品到收藏夹中
     *
     * @param productId 商品id
     * @param userId    用户id
     * @param price     商品价格
     * @param sales     商品的销量
     * @return 返回true/false
     */
    boolean addLike(String productId, String userId, String price, String sales);

    /**
     * 判断该商品是否被收藏
     *
     * @param formatId 规格id
     * @param userId   用户id
     * @return 返回一个Like对象
     */
    Like selectLikeByUidAndFid(String formatId, String userId);

    /**
     * 根据颜色和型号来查询规格
     *
     * @param productId 商品id
     * @param colorId   颜色id
     * @param sizeId    型号id
     * @return 返回一个format对象
     */
    Format selectByCidAndSid(String productId, String colorId, String sizeId);

    Format selectByCidAndSid2(String productId, String colorId, String sizeId);

    /**
     * 根据用户id清空历史记录
     *
     * @param userId 用户id
     * @return 返回一个true/false
     */
    boolean deleteHistory(String userId);
}
